package unq.equipos.dom;

import java.lang.reflect.Array;
import java.util.List;
import java.util.Vector;

/**
 * Esta formacion responde a un 4-3-1-2
 */
public class FormacionStrategyImpl implements FormacionStrategy {
	private List<Posicion> posiciones;

	public FormacionStrategyImpl(List<Posicion> posiciones) {
		this.setPosiciones(posiciones);
	}


	/**
	 *el equipo tiene al menos la cantidad de jugadores que la formación pida.
	 */
	@Override
	public Formacion armarFormacion(Equipo equipo) {
		Formacion formacion = new Formacion(equipo);
		List<Jugador> jugadores = equipo.getJugadores();
		Jugador mejorJugadorDePosicion;
		for (Posicion posicion : this.getPosiciones()) {
			mejorJugadorDePosicion = this.buscarMejorEnPosicion(posicion,
					jugadores);
			formacion.agregarTitular(mejorJugadorDePosicion, posicion);
			jugadores.remove(mejorJugadorDePosicion);
		}
		formacion.setSuplentes(jugadores);

		return formacion;
	}

	/**
	 * retorna el mejor jugador en la posicion dada PRECONDICION: los valores de
	 * habilidad deben ser >= 0
	 * la lista de jugadores jamas será vacía
	 */
	private Jugador buscarMejorEnPosicion(Posicion posicion,
			List<Jugador> jugadores) {
		Jugador elElegido = null;
		int valorDeElegido = -1,
			valorJugadorActual;
		for (Jugador current : jugadores) {
			valorJugadorActual = current.getValorHabilidad(posicion);
			if (valorJugadorActual > valorDeElegido) {
				elElegido = current;
				valorDeElegido = valorJugadorActual;
			}
		}
		return elElegido;
	}

	// setters & getters
	private void setPosiciones(List<Posicion> posiciones) {
		this.posiciones = posiciones;
	}

	public List<Posicion> getPosiciones() {
		return posiciones;
	}
}
